package visual;

import java.awt.Graphics;

import simulador.Estado;
import simulador.TipoEstado;

public class VOEstado implements IVisualObject {

	Estado estado_;
	int x,y;
	boolean ativo=false;
	boolean terminouComErro=false;
	int x_transicao=0;
	int y_transicao=0;
	
	public VOEstado(Estado estado,int x,int y)
	{
		this.estado_=estado;	
		this.x=x;
		this.y=y;
	}
	
	public void setTerminouComErro(boolean sim)
	{
		this.terminouComErro=sim;
	}
	
	public void setStatus(boolean ativo)
	{
		this.ativo=ativo;
	}
	
	public void renderizar(Graphics g)
	{
		if(terminouComErro)
		{
			g.setColor(Constantes.COR_CIRCULO_ERRO);
		}
		else
		{
			if(ativo)
			{
				g.setColor(Constantes.COR_CIRCULO_ATIVO);
			}
			else
			{
				g.setColor(Constantes.COR_CIRCULO);
			}
		}
		
		g.drawArc(x, y, Constantes.LARGURA_CIRCULO, Constantes.ALTURA_CIRCULO, 0, 360);
		
		if(estado_.getTipo()==TipoEstado.Aceitacao || estado_.getTipo()==TipoEstado.InicialAceitavel)
		{
			if(terminouComErro)
			{
				g.setColor(Constantes.COR_CIRCULO_BORDA_ERRO);
			}
			else
			{
				if(ativo)
				{
					g.setColor(Constantes.COR_CIRCULO_BORDA_ATIVO);
				}
				else
				{
					g.setColor(Constantes.COR_CIRCULO_BORDA);
				}
			}
			
			int x_=x-((Constantes.LARGURA_CIRCULO_BORDA - Constantes.LARGURA_CIRCULO)/2);
			int y_=y-((Constantes.ALTURA_CIRCULO_BORDA - Constantes.ALTURA_CIRCULO)/2);
			
			g.drawArc(x_, y_, Constantes.LARGURA_CIRCULO_BORDA, Constantes.ALTURA_CIRCULO_BORDA, 0, 360);
		}
		
		g.drawString(estado_.getRotulo(),
				x+(Constantes.LARGURA_CIRCULO/2)-15, 
				y+(Constantes.ALTURA_CIRCULO/2));
	}
	
	@Override
	public int hashCode() {
		return this.estado_.hashCode();
	}
	
	public int getNextXTransicao()
	{
		x_transicao+=5;
		return x_transicao;
	}

	public int getNextYTransicao()
	{
		y_transicao+=5;
		return y_transicao;
	}
}
